package Solutions;

/**
 * @Classname StringToInteger
 * @Description TODO
 * @Date 2021/3/2 17:17
 * @Created by ASUS
 */
public class StringToInteger {
    public int myAtoi(String str) {
        // 初值判断检查
        if (str == null || "".equals(str)) {
            return 0;
        }
        String string = str.trim();// 去掉字符串的首空格
        int flag = 1;// 符号标志
        long res = 0;// long类型的结果
        char[] chars = string.toCharArray();// 转为字符数组便于遍历
        for (int i = 0; i < chars.length; i++) {// 依次遍历数组
            if (i == 0) { // 首字符判断
                if (chars[i] == '-') { // 首字符为正负号做相应的操作
                    flag = -1;
                    continue;
                }
                if (chars[i] == '+') {
                    continue;
                }
            }
            // 如果遇到的首字符不是数字，直接返回 0
            if ((chars[i] < 47 || chars[i] > 57) && i == 0) {
                return 0;
            }
            if (chars[i] < 47 || chars[i] > 57) { // 如果遇到的不是数字，则不用再往后面遍历了，直接将结果返回即可
                return (int) res;
            }
            // 依次累加得到结果
            res = 10 * res + (chars[i] - 48) * flag;
            if (res > Integer.MAX_VALUE) { // 如果res > Integer.MAX_VALUE -> 上溢出返回 ： Integer.MAX_VALUE
                return Integer.MAX_VALUE;
            } else if (res < Integer.MIN_VALUE) {// 如果res < Integer.MIN_VALUE -> 下溢出返回 ： Integer.MIN_VALUE
                return Integer.MIN_VALUE;
            }
        }
        return (int) res;
    }

    public static void main(String[] args) {
        System.out.println(new StringToInteger().myAtoi("-123456"));
    }
}
